package lib

import (
	"fmt"
	"github.com/casbin/casbin/v2"
	"github.com/casbin/gorm-adapter/v3"
	"log"
)

var E *casbin.Enforcer

func InitDb() {
	fmt.Println("初始化mysql")
	initDB()
	fmt.Println("创建库")
	Migrate()
	fmt.Println("实例化adapter适配器")
	adapter, err := gormadapter.NewAdapterByDB(DB)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("获取model.conf")
	e, err := casbin.NewEnforcer("resources/model.conf", adapter)
	if err != nil {
		fmt.Println("获取 model.conf 失败")
		log.Fatal(err)
	}
	fmt.Println("加载policy")
	err = e.LoadPolicy()
	if err != nil {
		log.Fatal(err)
	}
	E = e
	fmt.Println("aaa123")
	//initPolicy()
}

//从我们的库里初始化 策略数据
func InitPolicy() {
	//E.AddPolicy("dev", "/depts", "GET")
	//E.AddPolicy("admin", "/depts", "POST")
	//E.AddPolicy("admin", "/depts/*", "GET")
	//E.AddPolicy("admin", "/depts/*", "POST")
	//E.AddPolicy("guest", "/depts", "GET")
	//E.AddPolicy("ops", "/depts", "GET")
	//E.AddPolicy("manager", "/depts", "GET")
	//E.AddPolicy("manager", "/depts", "POST")
	//E.AddPolicy("manager", "/depts/*", "GET")
	//E.AddPolicy("manager", "/depts/*", "POST")
	//E.AddRoleForUser("zhangsan","member")
	///下面 这部分是初始化 角色
	fmt.Println("GetRoles")
	m := make([]*RoleRel, 0)
	GetRoles(0, &m, "") //获取角色 对应
	for _, r := range m {
		fmt.Printf("m 中prole： %s,m 中 role： %s \n", r.PRole, r.Role)
		_, err := E.AddRoleForUser(r.PRole, r.Role)
		if err != nil {
			log.Fatal(err)
		}
	}
	/////// 初始化用户角色
	fmt.Println("123")
	userRoles := GetUserRoles()
	for _, ur := range userRoles {
		for _, j := range ur.Roles {
			fmt.Printf("ur 中username： %s,m 中 rolename： %s \n", ur.UserName, j.RoleName)
			_, err := E.AddRoleForUser(ur.UserName, j.RoleName)
			if err != nil {
				log.Fatal(err)
			}
		}

	}
	///// 初始化 路由角色
	routerRoles := GetRouterRoles()
	for _, rr := range routerRoles {
		fmt.Println("从routerRoles中获取到的roles为： ", rr.Roles)

		for _, j := range rr.Roles {
			_, err := E.AddPolicy(j.RoleName, rr.RouterUri, rr.RouterMethod)
			if err != nil {
				log.Fatal(err)
			}
		}

	}

}
